package com.jiazhong.basic.pack0308.coll;

import java.util.*;

// Collection--->List---->Vector
// 数据结构（数组）
public class DemoA {

    // 1. 如何产生new集合
    private static void a() {
        // 产生了一个集合 空容器
        Vector v1 = new Vector<>();
        // 产生了一个集合 空容器 只能存放int类型数据 <Integer>：泛型
        Vector<Integer> v2 = new Vector<>();
        // 产生了一个集合 空容器 只能存放string类型数据
        Vector<String> v3 = new Vector<>();
        System.out.println(v1);
        System.out.println(v2);
        System.out.println(v3);
        /*
        int[] a = new int[5];
        a[1] = 4;
        a[2] = "admin";*/
    }

    // 2. 如何对集合进行CRUD(存放、获取、修改、删除)
    private static void b() {
        Vector<String> vector = new Vector<>();
        // 1. 存放
        vector.add("aa"); // aa 存放到集合的末尾（排队）
        vector.add("bb"); // aa bb
        vector.add("cc"); // aa bb cc
        vector.add("bb"); // aa bb cc bb
        vector.add("dd"); // aa bb cc bb dd
        vector.add(null); // aa bb cc bb null
        System.out.println(vector);
        vector.add(2, "kk"); // 插入
        System.out.println(vector);
        // 2. 获取
        String s4 = vector.get(4);
        System.out.println(s4);
        // 3. 修改
        vector.set(4, "mm"); // 将第五个元素修改成mm
        System.out.println(vector);
        // 4. 删除
        vector.remove(3); // 删除第四号元素
        vector.remove("ll"); // 删除指定内容的一个元素
        System.out.println(vector);
    }

    // 3. 其他方法
    private static void c() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        // 获取长度
        int size = vector.size();
        // 是否是空  size==0 true false
        boolean empty = vector.isEmpty();
        // 清空
        // vector.clear();
        // 从指定位置截取产生新的集合 [1,3)
        List<String> subList = vector.subList(1, 3);
        String first = vector.firstElement();
        String last = vector.lastElement();
        String s2 = vector.elementAt(2); // 同get
        // 将集合转换成数组
        Object[] array = vector.toArray();
        System.out.println(size);
        System.out.println(empty);
        System.out.println(vector);
        System.out.println(subList);
        System.out.println(first);
        System.out.println(last);
        System.out.println(s2);
        System.out.println(Arrays.toString(array));
    }

    // 4. 循环集合
    private static void d1() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        for (int i = 0; i < vector.size(); i++) {
            String s = vector.get(i);
            System.out.print(s + "\t");
        }
    }

    private static void d2() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        // forEach（增强for）简写
        for (String s : vector) {
            System.out.print(s + "\t");
        }
    }

    private static void d3() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        // forEach（增强for）标准
        Iterator<String> iterator = vector.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            System.out.print(s + "\t");
        }
    }

    private static void d4() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        // forEach（增强for）lambda
        vector.forEach(s -> {
            System.out.print(s + "\t");
        });
    }

    private static void d5() {
        Vector<String> vector = new Vector<>();
        vector.add("aa");
        vector.add("bb");
        vector.add("dd");
        vector.add("cc");
        vector.add("ee");
        vector.add("ff");
        vector.forEach(System.out::println);
    }

    private static Scanner scan = new Scanner(System.in);

    // 5. 如何排序、如何查找
    private static void e1() {
        Vector<Integer> vector = new Vector<>();
        for (int i = 0; i < 15; i++) {
            vector.add((int) (Math.random() * 10 + 1));
        }
        System.out.println("集合的内容是：" + vector);
        System.out.print("请输入一个数：");
        int number = scan.nextInt();
        // 判断number在集合中是否存在
        boolean b = vector.contains(number);
        System.out.println(b ? "存在" : "不存在");
        // 找出number在集合中第一次出现的下标，不存在返回-1
        int index1 = vector.indexOf(number);
        System.out.println(index1);
        // 找出number在集合中最后一次出现的下标，不存在返回-1
        int index2 = vector.lastIndexOf(number);
        System.out.println(index2);
        // 找出number在集合第五个位置开始第一次出现的下标，不存在返回-1
        int index3 = vector.indexOf(number, 4);
        System.out.println(index3);
    }

    private static void e2() {
        Vector<Integer> vector = new Vector<>();
        for (int i = 0; i < 15; i++) {
            vector.add((int) (Math.random() * 10 + 1));
        }
        System.out.println("集合的内容是：" + vector);
        Collections.sort(vector); // Arrays.sort(array);
        System.out.println(vector);
    }


    // 练习：找出集合中5出现的所有位置
    private static void work01() {
        Vector<Integer> vector = new Vector<>();
        for (int i = 0; i < 20; i++) {
            vector.add((int) (Math.random() * 10 + 1));
        }
        System.out.println(vector);
        int num = 5;
        int begin = 0;
        while (true) {
            int index = vector.indexOf(num, begin);
            if (begin >= vector.size()) {
                break;
            }
            if (index == -1) {
                break;
            }
            begin = index + 1;
            System.out.println("元素位置是：" + index);
        }

    }

    private static void work02() {
        Vector<Integer> vector = new Vector<>();
        for (int i = 0; i < 20; i++) {
            vector.add((int) (Math.random() * 10 + 1));
        }
        System.out.println(vector);
        work03(vector,0,5);
    }

    private static void work03(Vector<Integer> vector, int begin, int num) {
        int index = vector.indexOf(num, begin);
        if (begin >= vector.size()) {
            return;
        }
        if (index == -1) {
            return;
        }
        begin = index + 1;
        System.out.println("元素位置是：" + index);
        work03(vector, begin, num);
    }

    public static void main(String[] args) {
        work02();
    }
}
